#pragma once
#ifndef _fastbird_Object_header_included_
#define _fastbird_Object_header_included_

#include <Engine/IObject.h>
#include <Engine/SceneGraph/BoundingVolume.h>

namespace fastbird
{
	class IScene;
	class IVertexBuffer;
	class IIndexBuffer;
	class IMaterial;
	class IInputLayout;
	class IRasterizerState;
	class IBlendState;

	class Object : public IObject
	{
	public:
		Object();
		virtual ~Object();

		virtual void OnAttachedToScene(IScene* pScene);
        virtual void OnDetachedFromScene(IScene* pScene);

		IRasterizerState* GetRasterizerState() { return mRasterizerState; }
		IBlendState* GetBlenderState() { return mBlendState; }

		BoundingVolume* GetBoundingVolume() const { return mBoundingVolume; }

	protected:
		IScene* mScene;

		SmartPtr<IVertexBuffer> mVertexBuffer;
		SmartPtr<IIndexBuffer> mIndexBuffer;
		SmartPtr<IInputLayout> mInputLayout;
		SmartPtr<IMaterial> mMaterial;
		SmartPtr<IRasterizerState> mRasterizerState;
		SmartPtr<IBlendState> mBlendState;
		SmartPtr<BoundingVolume> mBoundingVolume;
	};
}

#endif //_fastbird_Object_header_included_